import axios, { type AxiosRequestHeaders } from 'axios'
import { useTokenStore } from '@/stores/mytoken'
import { refreshToken } from '@/api/users'

const request = axios.create({
    // baseURL: import.meta.env.VITE_API_URL
})


// 请求拦截器 每一次请求都带上token
request.interceptors.request.use(config => {
    if(!config.headers) {
        config.headers = {} as AxiosRequestHeaders
    }
    // 获取token
    const tokenStore = useTokenStore()
    // 把accesstoken放到每个请求头中
    config.headers.Authorization = tokenStore.token?.access_token

    return config
})



// 响应拦截器
request.interceptors.response.use(response => {
    // 这里可以对响应做一些处理
    return response
}, async error => {
    // 这里可以对错误做一些处理
    if(error.response.status === 401) {
        // 刷新token
        const { data } = await refreshToken()
        if (data.success) {
            // 刷新成功，更新token
            useTokenStore().setToken(data.content)
            // 重新请求login接口，并把结果返回
            request(error.config)
        } else {
            // 刷新失败，跳转login页面
            ElMessage.error('token刷新失败,请重新登录')
            useRouter().push({name: 'login', query: {redirect: useRouter().currentRoute.value.fullPath}})
        }
    }
    return Promise.reject(error)
})


export default request